/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package androidutal;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import data.dataBase.BaseDeDatos;
import java.io.*;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ProgressMonitor;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;


/**
 *
 * @author blackmoon
 */
public class JVentana extends JFrame{
    
    private Image icono;
    private JPanelFondo fondo;
    private JPanel menu;
    private Datos info;
    private BaseDeDatos baseDeDatos;
    JPanelResumen resumen ;
    JMenuAlumno menualumno;
    JMenuExAlumno menuExAlumno;
    JMenuCalendarioEvento menuCalendario;
    private  String DirectorioGuardado;
    public WSConfig configuracionSubeYBaja;
    
    public JVentana() throws HeadlessException, FileNotFoundException, IOException {
        
        
        
         this.configuraciones();
         cargardirectorio();
         info = new Datos();
         menu = new JPanel(new BorderLayout());
         menu.add(menualumno,BorderLayout.NORTH);
         menu.add(menuExAlumno,BorderLayout.CENTER);
         menu.add(menuCalendario,BorderLayout.SOUTH);
         fondo = new JPanelFondo(this);    
         resumen = new JPanelResumen(this, "");
         this.add(menu,BorderLayout.CENTER);
         this.add(fondo,BorderLayout.SOUTH);
         fondo.repaint();
         this.repaint();
         
         menu.repaint();
         fondo.repaint();
         this.repaint();
         this.pack();
         this.baseDeDatos=this.load();
         if (this.baseDeDatos==null)
            this.baseDeDatos= new BaseDeDatos("xd");
        
    }

    public BaseDeDatos getBaseDeDatos() {
        return baseDeDatos;
    }

    public void setBaseDeDatos(BaseDeDatos baseDeDatos) {
        this.baseDeDatos = baseDeDatos;
    }
    

    private void configuraciones() {
        icono = Toolkit.getDefaultToolkit().getImage("iconos//3d.png");
        this.setIconImage(icono);
        this.setTitle("Sistema Informacion ICC");
        this.setPreferredSize(new Dimension(500,680));
        this.setMinimumSize(new Dimension(500, 680));
        //this.setResizable(false);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setLayout(new BorderLayout());
        this.setVisible(true);
        menualumno = new JMenuAlumno(this);
        menuExAlumno = new JMenuExAlumno(this);
        menuCalendario = new JMenuCalendarioEvento(this);
        
        this.setConfiguracionSubeYBaja(this.loadConfig());
         if (this.getConfiguracionSubeYBaja()==null)
         {
            this.setConfiguracionSubeYBaja( new WSConfig("10.0.2.2",""));
         }
        
        
    } 

    public Image getIcono() {
        return icono;
    }

    public void setIcono(Image icono) {
        this.icono = icono;
    }

    public JPanelFondo getFondo() {
        return fondo;
    }

    public void setFondo(JPanelFondo fondo) {
        this.fondo = fondo;
    }

    public JPanel getMenu() {
        return menu;
    }

   

   

   

    
    
    
    public void AgregarConfiguracion() throws FileNotFoundException, IOException{
        menu.setVisible(false);
        
        this.add(new JPanelConfiguracion(this),BorderLayout.CENTER);
        
    }

    public Datos getInfo() {
        return info;
    }

    public void setInfo(Datos info) {
        this.info = info;
    }

    public JPanelResumen getResumen() {
        return resumen;
    }

    public JMenuCalendarioEvento getMenuCalendario() {
        return menuCalendario;
    }

    public void setMenuCalendario(JMenuCalendarioEvento menuCalendario) {
        this.menuCalendario = menuCalendario;
    }

    public JMenuExAlumno getMenuExAlumno() {
        return menuExAlumno;
    }

    public void setMenuExAlumno(JMenuExAlumno menuExAlumno) {
        this.menuExAlumno = menuExAlumno;
    }

    public JMenuAlumno getMenualumno() {
        return menualumno;
    }

    public void setMenualumno(JMenuAlumno menualumno) {
        this.menualumno = menualumno;
    }

    void setBotonSeleccionado() {
        menuCalendario.setBotonSeleccionado("");
        menualumno.setBotonSeleccionado("");
        menuExAlumno.setBotonSeleccionado("");
    }

    
    void agregarResumenHorarios(String titulo,ArrayList<data.dataBase.Horario> horarios) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; horarios.size()>i;i++)
        {
            if(horarios.get(i).isBorrador())
                this.resumen.insertarInfo(horarios.get(i).getCurso(), horarios.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(horarios.get(i).getCurso(), horarios.get(i).getDate().toString(),"No");
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }
    
    void agregarResumenPlanificaciones(String titulo,ArrayList<data.dataBase.Planificacion> planificacion) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; planificacion.size()>i;i++)
        {
            if (planificacion.get(i).isBorrador())
                this.resumen.insertarInfo(planificacion.get(i).getObservaciones(), planificacion.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(planificacion.get(i).getObservaciones(), planificacion.get(i).getDate().toString(),"No");
                
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }
    
    
    
    
    
    
    void agregarResumen(String titulo) {
        this.menu.setVisible(false);
        this.resumen = new JPanelResumen(this,titulo);
        
        this.add(this.resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }
    
    public boolean save(){
        
        Object bd= (Object)this.baseDeDatos;
        try {
       //fichero en el que se guardará el objeto
       FileOutputStream file=new FileOutputStream("datos.autal");
       
       //canal de salida del fichero
       ObjectOutputStream os;
       os = new ObjectOutputStream(file);
     
       //escribimos el objeto en el fichero
       os.writeObject(bd);
       
       //cerramos el canal de salida y el fichero
       os.close();
       file.close();
       
      } catch (IOException e) {
       return false;
  }
  
  return true;
 }
    
    
    public boolean saveToWS(){
        BaseDeDatos temp =filtrarBorradores();
        
        
        
        Object bd= (Object)temp;
        try {
       //fichero en el que se guardará el objeto
       
       FileOutputStream file2=new FileOutputStream(DirectorioGuardado+"/datos.autal");
       //canal de salida del fichero
       
       
       ObjectOutputStream os2;
       os2 = new ObjectOutputStream(file2);
       //escribimos el objeto en el fichero
       
       os2.writeObject(bd);
       //cerramos el canal de salida y el fichero
       
       os2.close();
       file2.close();
      } catch (IOException e) {
       return false;
  }
  
  return true;
 }

    public BaseDeDatos load(){
      BaseDeDatos obj;
      try {
       FileInputStream fis = new FileInputStream("datos.autal");
       ObjectInputStream ois = new ObjectInputStream (fis);

       obj =(BaseDeDatos)ois.readObject();

       ois.close();
       fis.close();
         } catch (IOException e) {
       return null;
      } catch (ClassNotFoundException e) {
       return null;
      }

      return obj;
     }

    void agregarResumenAyudante(String string, ArrayList<data.dataBase.Ayudante> ayudantes) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,string);
        for(int i=0; ayudantes.size()>i;i++)
        {
            if(ayudantes.get(i).isBorrador())
                this.resumen.insertarInfo(ayudantes.get(i).getCurso(), ayudantes.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(ayudantes.get(i).getCurso(), ayudantes.get(i).getDate().toString(),"No");
                
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
        
    }

    void agregarResumenGeneral(String titulo, ArrayList<data.dataBase.General> generales) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; generales.size()>i;i++)
        {
            if(generales.get(i).isBorrador())
                this.resumen.insertarInfo(generales.get(i).getTitulo(), generales.get(i).getDate().toString(),"Si");
            else
               this.resumen.insertarInfo(generales.get(i).getTitulo(), generales.get(i).getDate().toString(),"No"); 
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
        
    }

    void agregarResumenPracticas(String titulo, ArrayList<data.dataBase.MemoriaPractica> practicas) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; practicas.size()>i;i++)
        {
            if(practicas.get(i).isBorrador())
                this.resumen.insertarInfo(practicas.get(i).getTitulo(), practicas.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(practicas.get(i).getTitulo(), practicas.get(i).getDate().toString(),"No");
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }

    void agregarResumenSuspensiones(String titulo, ArrayList<data.dataBase.Suspension> suspensiones) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; suspensiones.size()>i;i++)
        {
            if(suspensiones.get(i).isBorrador())
                this.resumen.insertarInfo(suspensiones.get(i).getCurso(), suspensiones.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(suspensiones.get(i).getCurso(), suspensiones.get(i).getDate().toString(),"No");
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }

    void agregarResumenBecas(String titulo, ArrayList<data.dataBase.Beca> becas) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; becas.size()>i;i++)
        {
            if(becas.get(i).isBorrador())
                this.resumen.insertarInfo(becas.get(i).getNombre(), becas.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(becas.get(i).getNombre(), becas.get(i).getDate().toString(),"No");
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }

    void agregarResumenGeneralEx(String titulo, ArrayList<data.dataBase.GeneralEx> generalExs) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; generalExs.size()>i;i++)
        {
            if(generalExs.get(i).isBorrador())
                this.resumen.insertarInfo(generalExs.get(i).getTitulo(), generalExs.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(generalExs.get(i).getTitulo(), generalExs.get(i).getDate().toString(),"No");
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }

    void agregarResumenPostGrado(String titulo, ArrayList<data.dataBase.PostGrado> postGrados) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; postGrados.size()>i;i++)
        {
            if(postGrados.get(i).isBorrador())
                this.resumen.insertarInfo(postGrados.get(i).getNombre(), postGrados.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(postGrados.get(i).getNombre(), postGrados.get(i).getDate().toString(),"No");
        }
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }

    void agregarResumen(String titulo, ArrayList<data.dataBase.OfertaLaboral> ofertasLaborales) {
        this.menu.setVisible(false);
        resumen = new JPanelResumen(this,titulo);
        for(int i=0; ofertasLaborales.size()>i;i++)
        {
            if(ofertasLaborales.get(i).isBorrador())
                this.resumen.insertarInfo(ofertasLaborales.get(i).getCargo(), ofertasLaborales.get(i).getDate().toString(),"Si");
            else
                this.resumen.insertarInfo(ofertasLaborales.get(i).getCargo(), ofertasLaborales.get(i).getDate().toString(),"No");
        }
        
        this.resumen.repaint();
        this.add(resumen,BorderLayout.CENTER);
        resumen.setVisible(true);
    }

   

public void subirFTP(File file)
{
    
    FileCopy.FileCopy(file.getAbsolutePath(),this.configuracionSubeYBaja.getCarpetaWeb()+"/"+file.getName());
       
    
}

    public void cargardirectorio() {
        try {
            FileReader leer = null;
            
                File archivo = new File("src/source.txt");
                leer = new FileReader(archivo);
                BufferedReader bf = new BufferedReader(leer);
                String sCadena;
            try {
                while ((sCadena = bf.readLine())!=null) {
                   DirectorioGuardado=sCadena;
                }
            } catch (IOException ex) {
                Logger.getLogger(JVentana.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                leer.close();
                FileCopy.FileCopy("src/source.txt",this.getDirectorioGuardado()+"/source.txt");
            } catch (IOException ex) {
                Logger.getLogger(JVentana.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(JVentana.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
          
        }

    public String getDirectorioGuardado() {
        return DirectorioGuardado;
    }

    public void setDirectorioGuardado(String DirectorioGuardado) {
        this.DirectorioGuardado = DirectorioGuardado;
    }

    private BaseDeDatos filtrarBorradores() {
        BaseDeDatos temp = new BaseDeDatos("");
        
        for(int i=0; baseDeDatos.getAyudantes().size()>i;i++)
        {
            if(!baseDeDatos.getAyudantes().get(i).isBorrador())
                temp.getAyudantes().add(baseDeDatos.getAyudantes().get(i));
            
        }
        
        for(int i=0; baseDeDatos.getBecas().size()>i;i++)
        {
            if(!baseDeDatos.getBecas().get(i).isBorrador())
                temp.getBecas().add(baseDeDatos.getBecas().get(i));
            
        }
        for(int i=0; baseDeDatos.getGenerales().size()>i;i++)
        {
            if(!baseDeDatos.getGenerales().get(i).isBorrador())
                temp.getGenerales().add(baseDeDatos.getGenerales().get(i));
            
        }
        for(int i=0; baseDeDatos.getGeneralExs().size()>i;i++)
        {
            if(!baseDeDatos.getGeneralExs().get(i).isBorrador())
                temp.getGeneralExs().add(baseDeDatos.getGeneralExs().get(i));
            
        }
        for(int i=0; baseDeDatos.getHorarios().size()>i;i++)
        {
            if(!baseDeDatos.getHorarios().get(i).isBorrador())
                temp.getHorarios().add(baseDeDatos.getHorarios().get(i));
            
        }
        for(int i=0; baseDeDatos.getMemoriasPracticas().size()>i;i++)
        {
            if(!baseDeDatos.getMemoriasPracticas().get(i).isBorrador())
                temp.getMemoriasPracticas().add(baseDeDatos.getMemoriasPracticas().get(i));
            
        }
        for(int i=0; baseDeDatos.getPlanificaciones().size()>i;i++)
        {
            if(!baseDeDatos.getPlanificaciones().get(i).isBorrador())
                temp.getPlanificaciones().add(baseDeDatos.getPlanificaciones().get(i));
            
        }
        for(int i=0; baseDeDatos.getPostGrados().size()>i;i++)
        {
            if(!baseDeDatos.getPostGrados().get(i).isBorrador())
                temp.getPostGrados().add(baseDeDatos.getPostGrados().get(i));
            
        }
        for(int i=0; baseDeDatos.getSuspensiones().size()>i;i++)
        {
            if(!baseDeDatos.getSuspensiones().get(i).isBorrador())
                temp.getSuspensiones().add(baseDeDatos.getSuspensiones().get(i));
            
        }
        
        for(int i=0; baseDeDatos.getOfertasLaborales().size()>i;i++)
        {
            if(!baseDeDatos.getOfertasLaborales().get(i).isBorrador())
                temp.getOfertasLaborales().add(baseDeDatos.getOfertasLaborales().get(i));
            
        }
       
        ArrayList<String> keys= new ArrayList<String>();
        
        
            
            Object[] llaves =  baseDeDatos.getResumenEventos().keySet().toArray();
                for (int x=0; x<llaves.length;x++)
                {
                    String llave =llaves[x].toString();                 
                    baseDeDatos.getResumenEventos().get(llave);
                    for (int i=0;baseDeDatos.getResumenEventos().get(llave).size()>i;i++ )
                        if(!baseDeDatos.getResumenEventos().get(llave).get(i).isBorrador())
                        {
                            temp.addEvento(baseDeDatos.getResumenEventos().get(llave).get(i).getNombre()
                                    , baseDeDatos.getResumenEventos().get(llave).get(i).getTopico(),
                                    baseDeDatos.getResumenEventos().get(llave).get(i).getLugar()
                                    , baseDeDatos.getResumenEventos().get(llave).get(i).getHorario()
                                    , baseDeDatos.getResumenEventos().get(llave).get(i).getFile(),
                                    baseDeDatos.getResumenEventos().get(llave).get(i).getObservacion()
                                    , baseDeDatos.getResumenEventos().get(llave).get(i).getFecha()
                                    , baseDeDatos.getResumenEventos().get(llave).get(i).isBorrador()
                                    , baseDeDatos.getResumenEventos().get(llave).get(i).getDireccionArchivo());
                        }
                 
                }
                
                
        
        
        return temp;
    }

    public WSConfig getConfiguracionSubeYBaja() {
        return configuracionSubeYBaja;
    }

    public void setConfiguracionSubeYBaja(WSConfig configuracionSubeYBaja) {
        this.configuracionSubeYBaja = configuracionSubeYBaja;
    }
    
    
        
    
    public WSConfig loadConfig() {
      WSConfig obj;
      try {
       FileInputStream fis = new FileInputStream("config.wsa");
       ObjectInputStream ois = new ObjectInputStream (fis);

       obj =(WSConfig)ois.readObject();

       ois.close();
       fis.close();
         } catch (IOException e) {
       return null;
      } catch (ClassNotFoundException e) {
       return null;
      }

      return obj;
    }
    
    
    public boolean saveConfig(){
        
        Object bd= (Object)this.configuracionSubeYBaja;
        try {
       //fichero en el que se guardará el objeto
       FileOutputStream file=new FileOutputStream("config.wsa");
       
       //canal de salida del fichero
       ObjectOutputStream os;
       os = new ObjectOutputStream(file);
     
       //escribimos el objeto en el fichero
       os.writeObject(bd);
       
       //cerramos el canal de salida y el fichero
       os.close();
       file.close();
       
      } catch (IOException e) {
       return false;
  }
  
  return true;
 }

   


    
    
 
    
    
    
    
    
}
